package com.cmo.common.calling.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.cmo.common.model.Doctor;
import com.cmo.common.model.Pager;
import com.cmo.common.model.RltDoctor2queueType;
import com.cmo.common.model.RltPager2queueType;
import com.cmo.common.model.Triage;
import com.cmo.common.utils.Shared;
import com.cmo.common.utils.ToolString;
import com.jfinal.core.Controller;
import com.jfinal.plugin.activerecord.Record;

public class CallingLoginController extends Controller {
	Doctor servicedoctor=new Doctor();
	Shared shared=new Shared();
	Pager servicepager=new Pager();
	RltDoctor2queueType rdq=new RltDoctor2queueType();
	RltPager2queueType rpq=new RltPager2queueType();
	Triage triage=new Triage();
	//叫号器登陆
	public void call_login(){
		Map<String, Object> map=new HashMap<String, Object>();
		//获取登录工号
		String login_id=getPara("login_id");
		if(ToolString.isBlank(login_id)){
			map.put("return_code", "fail");
			map.put("return_msg", "请输入您的工号进行登陆");
			renderJson(map);
			return;
		}
		//根据医生登陆工号查询医生是否存在
		Record recordloginid= servicedoctor.qyeryByLogin(login_id);
		if(null==recordloginid){
			map.put("return_code", "fail");
			map.put("return_msg", "当前医生工号错误,请输入正确的医生工号");
			renderJson(map);
			return;
		}
		//获取客户端ip
		String ip=shared.getIpAddr(getRequest());
		//根据客户端ip查询是否有配置
		Record recordip= servicepager.queryByIp(ip);
		if(null==recordip){
			map.put("return_code", "fail");
			map.put("return_msg", "当前电脑没有配置为叫号器");
			renderJson(map);
			return;
		}
		
		//分诊台分诊模式 triage_type 1按医生 2按叫号器
		//根据叫号器 客户端ip查询分诊台ip
		Record rt= triage.finfPager_ip(ip);
		if(null==rt){
			map.put("return_code", "fail");
			map.put("return_msg", "当前电脑没有配置叫号器设置");
			renderJson(map);
			return;
		}
		//获取分诊台分针模式
		String type=rt.get("triage_type").toString();
		
		//按医生模式
		if("1".equals(type)){
			//查询医生模式的排班
			Record qdp =rdq.querydoctorpaiban(login_id);
			if(null==qdp){
				map.put("return_code", "fail");
				map.put("return_msg", "当前医生没有排班信息，请联系分诊台护士");
				renderJson(map);
				return;
			}else{
				//将医生doctor_id 添加到叫号器中
				servicepager.updatepagerinsert(login_id, ip);
				//清空不是本机叫号器的医生id
				servicepager.updatedoctorid(ip, login_id);
				//登陆
				Record record= servicedoctor.call_login(login_id);
				if(null==record){
					map.put("return_code", "fail");
					map.put("return_msg", "登陆失败,请确认登陆工号是否正确");
					renderJson(map);
					return;
				}else{
					List<Record> list= servicedoctor.call_doctor_queueType_name(login_id,ip,type);
					if(null==list){
						map.put("return_code", "fail");
						map.put("return_msg", "该医生没有分配队列");
						renderJson(map);
						return;
					}else{
						map.put("return_code", "success");
						map.put("return_msg", "登陆成功");
						map.put("list", list);
						map.put("queue_type_id", list.get(0).get("queue_type_id"));
						//将医生工号存入session中
						setSessionAttr("login_id", login_id);
						renderJson(map);
					}
				}
			}
		}else if("2".equals(type)){
			//将医生doctor_id 添加到叫号器中
			int pnum= servicepager.updatepagerinsert(login_id, ip);
			if(pnum>0){
				//按叫号器模式查询排班信息
				Record qpp= rpq.querypagerpaiban(login_id);
				if(null==qpp){
					//将当前医生的doctor_id从叫号器中移除
					servicepager.updatepagerdelete(ip);
					map.put("return_code", "fail");
					map.put("return_msg", "当前医生没有排班信息，请联系分诊台护士");
					renderJson(map);
					return;
				}else{
					//登陆
					Record record= servicedoctor.call_login(login_id);
					if(null==record){
						map.put("return_code", "fail");
						map.put("return_msg", "登陆失败,请确认登陆工号是否正确");
						renderJson(map);
						return;
					}else{
						List<Record> list= servicedoctor.call_doctor_queueType_name(login_id,ip,type);
						if(null==list){
							map.put("return_code", "fail");
							map.put("return_msg", "该医生没有分配队列");
							renderJson(map);
							return;
						}else{
							map.put("return_code", "success");
							map.put("return_msg", "登陆成功");
							map.put("list", list);
							//将队列id存入session
							setSessionAttr("queue_type_id", list.get(0).get("queue_type_id"));
							//将医生工号存入session中
							setSessionAttr("login_id", login_id);
							renderJson(map);
						}
					}
				}
			}
		}else{
			  map.put("return_code", "fail");
		      map.put("return_msg", "系统错误，请联系管理员");
		      renderJson(map);
		      return;
		}
		renderJson(map);
	}
}
